<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Как удалить книгу из самой себя </p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Несмотря на несколько бредовое название статьи, данный вопрос поднимается с завидным постоянством. Кто-то таким образом хочет защитить свое творение от использования после определенной даты; кто-то слишком мнителен; а кто-то хочет знать просто из интереса: вдруг пригодится?<br />Несмотря на всю абсурдность вопроса многие считают, что это нереально средствами только VBA. Честно скажу - сам когда-то так думал. Однако все гораздо проще, чем можно было предположить.</p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Итак, если у вас есть код в книге Excel и вы хотите удалить(самоуничтожить) книгу по прошествии определенной даты<span style=" font-style:italic;"> (в примере ниже это 30.01.2014)</span>: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6ef551ba633711936"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">ub DelThisWorkbook() If Date &gt; #1/30/2014# Then Application.DisplayAlerts = False ThisWorkbook.ChangeFileAccess xlReadOnly Kill ThisWorkbook.FullName Application.DisplayAlerts = True 'ThisWorkbook.Close 0 'если необходимо сразу же закрыть книгу(рекомендуется) End If End Sub</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">3</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">4</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">5</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">6</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">7</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">8</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">9 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6ef551ba633711936-1"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">ub</span><span style=" font-size:12px;"> DelThisWorkbook()</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551ba633711936-2"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">If Date &gt; #1/30/2014# Then</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551ba633711936-3"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">       </span><span style=" font-size:12px;">Application.DisplayAlerts = False</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551ba633711936-4"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">       </span><span style=" font-size:12px;">ThisWorkbook.ChangeFileAccess xlReadOnly</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551ba633711936-5"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">       </span><span style=" font-size:12px;">Kill ThisWorkbook.FullName</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551ba633711936-6"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">       </span><span style=" font-size:12px;">Application.DisplayAlerts = True</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551ba633711936-7"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">       </span><span style=" font-size:12px;">'ThisWorkbook.Close 0 'если необходимо сразу же закрыть книгу(рекомендуется)</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551ba633711936-8"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">End If</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551ba633711936-9"></a><span style=" font-size:12px;">E</span><span style=" font-size:12px;">nd</span><span style=" font-size:12px;"> Sub</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Необходимо будет лишь вызывать данную процедуру в нужный момент. Каждый решит для себя сам когда это сделать. На открытие книги или перед выполнением основного кода.</p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Если необходимо проверять дату при открытии книги, то в <a href="http://www.excel-vba.ru/chto-umeet-excel/chto-takoe-modul-kakie-byvayut-moduli#ThisWorkbook"><span style=" text-decoration: underline; color:#0000ff;">модуль книги</span></a> надо будет поместить такой код: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6ef551c3996568613"></a><span style=" font-size:12px;">P</span><span style=" font-size:12px;">rivate Sub Workbook_Open() DelThisWorkbook End Sub</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">3 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6ef551c3996568613-1"></a><span style=" font-size:12px;">P</span><span style=" font-size:12px;">rivate</span><span style=" font-size:12px;"> Sub Workbook_Open()</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551c3996568613-2"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">DelThisWorkbook</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551c3996568613-3"></a><span style=" font-size:12px;">E</span><span style=" font-size:12px;">nd</span><span style=" font-size:12px;"> Sub</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Код процедуры <span style=" font-weight:600;">DelThisWorkbook</span> приведен выше и он должен уже присутствовать в книге либо в <a href="http://www.excel-vba.ru/chto-umeet-excel/chto-takoe-modul-kakie-byvayut-moduli#ThisWorkbook"><span style=" text-decoration: underline; color:#0000ff;">модуле книги</span></a>, либо в <a href="http://www.excel-vba.ru/chto-umeet-excel/chto-takoe-modul-kakie-byvayut-moduli#StandartModule"><span style=" text-decoration: underline; color:#0000ff;">стандартном модуле</span></a>(<span style=" font-weight:600;">Insert</span> -<span style=" font-weight:600;">Module</span>).</p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Если же необходимо открыть книгу на один раз и сразу после закрытия удалить, то пригодится следующий код: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6ef551c9966055934"></a><span style=" font-size:12px;">P</span><span style=" font-size:12px;">rivate Sub Workbook_BeforeClose(Cancel As Boolean) Me.ChangeFileAccess xlReadOnly Kill Me.FullName End Sub</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">3</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">4 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6ef551c9966055934-1"></a><span style=" font-size:12px;">P</span><span style=" font-size:12px;">rivate</span><span style=" font-size:12px;"> Sub Workbook_BeforeClose(Cancel As Boolean)</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551c9966055934-2"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">Me.ChangeFileAccess xlReadOnly</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551c9966055934-3"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">Kill Me.FullName</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6ef551c9966055934-4"></a><span style=" font-size:12px;">E</span><span style=" font-size:12px;">nd</span><span style=" font-size:12px;"> Sub</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Код необходимо поместить в <a href="http://www.excel-vba.ru/chto-umeet-excel/chto-takoe-modul-kakie-byvayut-moduli#ThisWorkbook"><span style=" text-decoration: underline; color:#0000ff;">модуль книги</span></a>.</p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Полагаю, что не стоит лишний раз напоминать о том, что в данном случае <a href="http://www.excel-vba.ru/chto-umeet-excel/pochemu-ne-rabotaet-makros/"><span style=" text-decoration: underline; color:#0000ff;">макросы должны быть разрешены</span></a>.<br />Так же стоит отдельно отметить тот факт, что таким методом книги удаляются в обход корзины. Т.е. восстановить файл без спец.программ уже не получится.</p></body></html>